home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #11 / Amiga Plus CD - 2004 - No. 11.iso / AmiSoft / Util / rexx / CTGUI.lha / CTGUI.rexx < prev   
OS/2 REXX Batch file  |  2004-06-22  |  5KB  |  187 lines

  1. /* CTorrent GUI 0.1 (20.06.04)
  2.    ©2004 Michael Trebilcock */
  3.  
  4. CTPath = "ctorrent-1.3.2" /* Path to ctorrent-1.3.2 file */
  5. CTArgs = "-C 1" /* CTorrent arguments */
  6.  
  7. Signal On Break_C
  8. Signal On Halt
  9. Numeric Digits 14
  10.  
  11. Parse Arg Args
  12.  
  13. ID=Pragma("ID")
  14. CR="0D"x;TSize="0"
  15.  
  16. IF Args="" THEN DO
  17.  SAY "Usage: RX CTGUI <File>"
  18.  SAY "Example: RX CTGUI test.torrent"
  19.  Exit
  20. End
  21.  
  22. IF ~Exists(CTPath) THEN Call Break_C("Cannot find "CTPath,1)
  23.  
  24. IF Left(Args,1)='"' THEN Args=SubStr(Left(Args,Length(Args)-1),2)
  25. IF ~Exists(Args) THEN Call Break_C("Cannot find "Args,1)
  26. IF Pos(":",Args)>0 THEN Args="/"Translate(Args,"/",":")
  27.  
  28. ADDRESS COMMAND "SYS:C/RUN >T:CTGUI."ID".tmp "d2c(34)""CTPath""d2c(34) CTArgs d2c(34)""Args""d2c(34)" >PIPE:CTGUI."ID".tmp"
  29.  
  30. Call Open(IDFile,"T:CTGUI."ID".tmp","R") THEN DO
  31. ProcN=Word(Translate(ReadLn(IDFile),,"]"),2)
  32. Call Close(IDFile)
  33.  
  34. Call Open(File,"PIPE:CTGUI."ID".tmp","R")
  35.  
  36. DO UNTIL EOF(File)
  37.  Output=ReadLn(File)
  38.  Parse Var Output W1" "W2" "W3" "Rest
  39.  SELECT
  40.   WHEN W1="Piece" THEN PLength=W3
  41.   WHEN Output="FILES INFO" THEN DO 
  42.    Output=ReadLn(File)
  43.    IF Word(Output,1)="Directory:" THEN TFile=SubStr(Output,12)
  44.    DO UNTIL Word(Output,1)="Total:"
  45.     Words=Words(Output)
  46.     Word=Word(Output,Words)
  47.     IF Word(Output,1)="<1>"&TFile="TFILE" THEN TFile=SubStr(Left(Output,Length(Output)-Length(Word)-1),6)
  48.     IF Left(Word,1)="["&Right(Word,1)="]" THEN TSize=TSize+Translate(Word,,"[]")
  49.     Output=ReadLn(File)
  50.    End
  51.    Call GUI()
  52.    Call ReadLn(File)
  53.    IF ReadCh(File,1)=CR THEN DO
  54.     Call Time(R)
  55.     DO UNTIL Char=d2c(32)
  56.      Line=""
  57.      Call ReadCh(File,13)
  58.      DO UNTIL Char=CR|Char=d2c(32)
  59.       Char=ReadCh(File,1)
  60.       Line=Line""Char
  61.      End
  62.      Line2=Left(Line,Length(Line)-1)
  63.      Parse Var Line2 Count"/"Total
  64.      IF Count="0" THEN Count="1"
  65.      Calc=Time(E)*(Total/Count)-Time(E)
  66.      Parse Var Calc Secs"."Rest
  67.      Call ToPipe('ID 18 gt="Checksumming... 'Secs's"')
  68.      IF ~Exists("T:CTGUI."ID".tmp") THEN Call Break_C()
  69.     End
  70.    End
  71.   End
  72.   WHEN W1="Listen" THEN DO
  73.    Char=ReadCh(File,1)
  74.    IF Char~=CR THEN DO
  75.     DO UNTIL ReadLn(File)=""
  76.     End
  77.     Char=ReadCh(File,1)
  78.    End
  79.    Call Time(R)
  80.    DO UNTIL EOF(File)
  81.     Call ReadCh(File,76)
  82.     Line=""
  83.     DO UNTIL Pos("  ",Line)>0
  84.      Line=Line""ReadCh(File,3)
  85.     End
  86.     DO UNTIL Char=CR|Char=d2c(10)
  87.      Char=ReadCh(File,1)
  88.      Line=Line""Char
  89.     End
  90.     IF Char=d2c(10) THEN DO UNTIL ReadLn(File)=""
  91.     End
  92.     Parse Var Line Anim" "Clients",["Done"/"Total"/"Avail"],"AvgCPS","AvgUCPS" | "CrtCPS","CrtUCPS"  E:"Retries
  93.     DSize2=DSize
  94.     DSize=Done*PLength
  95.     PCent2=PCent
  96.     PCent=Done/Total*100
  97.     Parse Var PCent PCent"."Rest
  98.     IF PCent~=PCent2 THEN Call ToPipe('ID 1 defn='PCent)
  99.     Secs=Time(E)
  100.     Call ToPipe('ID 7 gt="'Calc()'"')
  101.     Call ToPipe('ID 13 gt="'AvgCPS'"')
  102.     Call ToPipe('ID 16 gt="'AvgUCPS'"')
  103.     IF DSize~=DSize2 THEN DO
  104.      IF Done=Total THEN DO
  105.       Call ToPipe('ID 18 gt="Download complete"')
  106.       Call Delay(300)
  107.       Call Break_C()
  108.      End
  109.      ELSE DO
  110.       RSize=TSize-DSize
  111.       IF AvgCPS>0 THEN DO
  112.        Secs=RSize/AvgCPS
  113.        Call ToPipe('ID 10 gt="'Calc()'"')
  114.       End
  115.       Call ToPipe('ID 18 gt="'DSize'/'TSize'"')
  116.      End
  117.     End
  118.     IF ~Exists("T:CTGUI."ID".tmp") THEN Call Break_C()
  119.    End
  120.   End
  121.   OTHERWISE NOP
  122.  End
  123. End
  124. Call Break_C()
  125. Exit
  126.  
  127. GUI:
  128. IF ~Open(PIPE,"AWNPipe:CTorrent/xc","RW") THEN DO
  129.  SAY "Unable to open GUI"
  130.  Call Break_C()
  131. End
  132.  
  133. Call ToPipe('title="CTGUI 0.1 ©2004 Michael Trebilcock" defg v m fw fh width=300')
  134. Call ToPipe('fuelgauge ticks=0 defn=0 percent') /* 1 */
  135. Call ToPipe('layout b=0')
  136. Call ToPipe(' button b=0 ro gt="Title:"')
  137. Call ToPipe(' button b=0 ro gt="'TFile'"') /* 4 */
  138. Call ToPipe('le')
  139. Call ToPipe('layout b=0')
  140. Call ToPipe(' button b=0 ro gt="Elapsed:"')
  141. Call ToPipe(' button b=0 ro gt="00:00:00"') /* 7 */
  142. Call ToPipe('le')
  143. Call ToPipe('layout b=0')
  144. Call ToPipe(' button b=0 ro gt="DL Remaining:"')
  145. Call ToPipe(' button b=0 ro gt="00:00:00"') /* 10 */
  146. Call ToPipe('le')
  147. Call ToPipe('layout b=0')
  148. Call ToPipe(' button b=0 ro gt="Download CPS:"')
  149. Call ToPipe(' button b=0 ro gt="0"') /* 13 */
  150. Call ToPipe('le')
  151. Call ToPipe('layout b=0')
  152. Call ToPipe(' button b=0 ro gt="Upload CPS:"')
  153. Call ToPipe(' button b=0 ro gt="0"') /* 16 */
  154. Call ToPipe('le')
  155. Call ToPipe('layout b=0')
  156. Call ToPipe(' button b=0 ro gt="Checksumming..."') /* 18 */
  157. Call ToPipe('le')
  158. Call ToPipe('open')
  159. Return 0
  160.  
  161. ToPipe:
  162. Call WriteLn(PIPE,Arg(1))
  163. PIPEOut=ReadLn(PIPE)
  164. Return 0
  165.  
  166. Calc:
  167. Hour=Secs/3600
  168. Parse Var Hour Hour"."Dec
  169. Dec="0."Dec
  170. Min=Dec*60
  171. Parse Var Min Min"."Dec
  172. Dec="0."Dec
  173. Sec=Dec*60
  174. Parse Var Sec Sec"."Dec
  175. Return Right(Hour,2,0)":"Right(Min,2,0)":"Right(Sec,2,0)
  176.  
  177. Halt:
  178. Break_C:
  179. IF Arg(2)="1" THEN SAY Arg(1)
  180. Call Close(File)
  181. Call Close(PIPE)
  182. IF ProcN~="PROCN" THEN DO
  183.  ADDRESS COMMAND "SYS:C/RUN <>NIL: SYS:C/Break "ProcN
  184.  Call Delete("T:CTGUI."ID".tmp")
  185. End
  186. Exit
  187.